package com.shitou.shitoumember.utils;


/**
 * Java中的ThreadLocal是一个线程级别的变量，它可以让你保存和存储在一个线程内的数据，
 * 这些数据在该线程内是唯一的，而在其他线程中则不是。即，每个线程都独立拥有一个变量的副本
 * ，互不干扰。这个变量只有线程自己可以访问修改，其他线程是无法访问它的。
 * ThreadLocal可以用来解决多线程环境下的数据共享问题，从而避免多线程之间出现竞争条件，
 * 提高程序的性能和可靠性。例如，在web应用程序中，每个请求都是由一个独立的线程处理的，
 * 我们可以使用ThreadLocal来保存请求相关的数据，比如用户信息、请求参数等，
 * 这样就可以避免在多个线程之间共享数据，在一定程度上提高了应用的安全性。
 */

/**
 * 在 Java 中，每个 ThreadLocal 对象都维护一个变量副本，通过 get() 和 set()
 * 方法可以访问和修改变量值。在多线程环境下，每个线程对该变量的访问都是独立的，
 * 因为每个线程都会有自己的变量副本。ThreadLocal 中的变量只在当前线程内部可见，
 * 其他线程无法访问该变量。因此，在多线程环境下，ThreadLocal 可以提供线程安全的数据共享
 * 方式，避免了线程间数据竞争的问题。
 *
 * ThreadLocal 的典型应用场景是：线程安全的 SimpleDateFormat 类，每个线程都需要拥有
 * 自己的 SimpleDateFormat 实例，而 ThreadLocal 可以实现每个线程拥有自己的
 * SimpleDateFormat 实例。此外，ThreadLocal 还广泛用于 Web 框架中，
 * 如 Spring 框架中的 TransactionSynchronizationManager（用于管理事务同步）就
 * 是基于 ThreadLocal 实现的。
 *
 * 综上所述，ThreadLocal 提供了一种线程安全的数据共享方式，用于解决多线程环境下的数据竞
 * 争问题，能够保证每个线程都有自己的变量副本，并且互不干扰，提高了程序的并发性能和可维护性。
 */

import com.shitou.shitoumember.entity.MemberEntity;

/**
 * the class {UserContext} create time is
 * @date 2022年04月24日23:23
 */
public class MemberContext {

    private static ThreadLocal<MemberEntity> objectThreadLocal = new ThreadLocal<>();

    /**
     * 功能描述: 将用户存入ThreadLocal中，其中key为用户线程
     * @param object
     */
    public static void setObject(MemberEntity object){
        objectThreadLocal.set(object);
    }

    /**
     * 通过用户线程获得object
     */
    public static MemberEntity getObject(){
        return objectThreadLocal.get();
    }

}
